#include "gamepanel.h"
#include "loading.h"

#include <QPainter>
#include <QTimer>

Loading::Loading(QWidget *parent) : QWidget(parent){
    m_bk.load(":/images/loading.png");
    setFixedSize(m_bk.size());

    setWindowFlags(Qt::FramelessWindowHint | windowFlags());
    setAttribute(Qt::WA_TranslucentBackground);

    QPixmap pixmap(":/images/progress.png");
    QTimer *timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, [=](){
        // 把 QPixmap pixmap 的图像复制到 QPixmap m_progress 上的效果
        m_progress = pixmap.copy(0, 0, m_dist, pixmap.height());

        // qt 的一个槽函数，把进度给刷新到界面上的功能吧。（可以注释了对比看看是什么效果）
        // update() 槽函数是一个用于重新绘制部件的信号。当部件需要重绘时，你可以调用 update() 函数。这会导致Qt在合适的时机调用部件的 paintEvent() 函数来执行实际的绘制工作。
        update();

        // 加载完成到开始游戏界面交互的地方
        // 加载完了就显示 gamepanel.ui 了，close 掉加载的图像。gamepanel.ui 可以说是一个最主要的 ui 界面了，buttongroup.ui 和 scorepanel.ui 就是配角
        if(m_dist >= pixmap.width()){
            timer->stop();
            timer->deleteLater();
            GamePanel* panel = new GamePanel;
            panel->show(); // class GamePanel 继承的 class QMainWindow, show 是 QMainWindow 的槽函数
            close();
        }

        m_dist += 5;
    });

    timer->start(15); // 单位 ms
}

void Loading::paintEvent(QPaintEvent *event){
    Q_UNUSED(event) // #define Q_UNUSED(x) void(x), 后面的 ; 可加可不加
    ;
    ; // 多加了 ; 也是没有什么问题的
    // (void)event; // 和上面的一行是等价的, 后面的 ; 得加上

    QPainter p(this);
    p.drawPixmap(rect(), m_bk);
    p.drawPixmap(62, 417, m_progress.width(), m_progress.height(), m_progress);
}
